文章目录
  1. 1. 如何在 Android.mk 中添加自定义库
  2. 2. 编译 framework 自动增加自定义资源
  3. 3. 增加 overlay 文件夹

如何在 Android.mk 中添加自定义库

在编译 android 模块的时候,有时候想自己添加一些自己的东西,或者是说链接一些额外的库(例如说自己写的)。这个时候需要去修改 Android.mk 文件。这里以 android 中简单的 toolbox 模块为例说明。例如说要在 toolbox 中加一个自己的命令,除了编写相应的 .c 文件文件外(例如 myhello.c),Android.mk 中要这么改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// myhello 是你自己加的命令
TOOLS := \
myhello \
ls \
mount \
cat \
ps \
kill \
ln \
insmod \
rmmod \
lsmod \
... ...
// 默认的是只有 libcutils 和 libc 的,后面的那个 libmyhello 假设就是你要链接的库(你自己写的那个)
// 动态库是加到 LOCAL_SHARED_LIBRARIES 这个变量,静态库是加到 LOCAL_STATIC_LIBRARIES 这个变量
// 动态库还需要把你的库复制到 obj/lib 下(弄个连接也可以,运行的时候要把你的库弄到 system/lib 下 )
// 动态库和静态库是不一样的,具体的可以通过出错信息来看(mm showcommands)
// 然后后面那个 LOCAL_LDFLAGS 可以用来设置一些额外链接信息
// 像这里我链接了 x11 的库,不过一般在 android 里是用不到这个库的
LOCAL_SHARED_LIBRARIES := libcutils libc libmyhello
OLD_LDFLAGS := $(LOCAL_LDFLAGS)
LOCAL_LDFLAGS = $(OLD_LDFLAGS) -L/usr/lib -lX11
... ...

编译 framework 自动增加自定义资源

在定制 framework 的一些模块的时候(例如 framework-res、SystemUI、Launcher 等),有些时候需要增加一些自己的资源(图片、xml 等)。官方预留了一个路径: device/xx(oem)/xx(product)/overlay 。在这个下面可以覆盖一些原有的资源文件(官方的原意应该是主要给 OEM 改一些 config 的)。我们可以把自己的新增的资源文件加如到自己的模块对应的路径下。不过对于新增的资源,需要在 xml 中声明:。

# type 是资源类型(integer 等),name 就是资源的名字了
add-resource type="xx" name="xx"

不过每一个资源都要加这个声明确实比较烦,可以在模块的 Android.mk 文件中增加了一个标志,让系统在编译的时候帮你自动添加这个 add-resource。增加这个标志:

LOCAL_AAPT_FLAGS := --auto-add-overlay

增加 overlay 文件夹

为了方便 OEM 定制, android 中在很多个地方可以增加 overlay 文件夹,覆盖一些 xml 中的定义和替换资源文件(图片等)。其中一个地方就是 /device/vendor/product 下面,例如说 asus 代工的 nexus7 的可以是 /device/asus/flo/overlay。但是新增文件夹还需要告诉编译系统 overlay 的路径是什么。在 /device/vendor/product 下面自定义的 mk(例如说 BoardConfig.mk,在哪个 mk 文件里加可以看自己的具体情况) 文件中加上一句:

1
2
3
#override
DEVICE_PACKAGE_OVERLAYS := device/$(vendor)/$(TARGET_PRODUCT)/overlay

配合上面那个自动增加自定义资源的更好用 ^_^

文章目录
  1. 1. 如何在 Android.mk 中添加自定义库
  2. 2. 编译 framework 自动增加自定义资源
  3. 3. 增加 overlay 文件夹